package main

import (
	"encoding/json"
	"fmt"
)

//JSON的序列化和反序列化
//序列化：将结构体转换成json字符串
//反序列化：将json字符串转成结构体
//使用场景：
//序列化，http api接口返回出去的是json字符串，所以要将结构体转成json字符串
//反序列化，http api接口在接收参数时，接收的是json字符串，要把它转成结构体才能在golang里面使用

//json tag的用法就是在序列化和反序列化过程中，将结构体中的字段名进行转换，转成tag中定义的字段名
type student struct {
	Id     int    `json:"id"`
	Gender string `json:"gender"`
	Name   string `json:"username"`
	Sno    int    `json:"snumber"`
}

func main() {
	s1 := &student{
		Id:     1,
		Gender: "male",
		Name:   "zhangsan",
		Sno:    15,
	}
	fmt.Println(s1)

	//json序列化
	strBytes, _ := json.Marshal(s1)
	fmt.Println(string(strBytes))
	//json反序列化
	str := `{"id":1,"gender":"female","username":"Alice","snumber":2}`
	s2 := &student{}
	_ = json.Unmarshal([]byte(str), &s2) //s2添加&内存地址，绑定到源数据上
	fmt.Println(s2)
}
